package com.mnc.dao.base;

import java.util.List;

public interface IBaseDao{
	/**
	 * 添加实体
	 * 
	 * @param eneity
	 */
	public void add(Object eneity);

	/**
	 * 更新实体
	 * 
	 * @param eneity
	 */
	public void update(Object eneity);

	/**
	 * 
	 * @param <T>
	 * @param eneityClass
	 *            实体class
	 * @param eneityId
	 *            主键id
	 */
	public <T> void remove(Class<T> eneityClass, Object eneityId);

	/**
	 * 
	 * @param <T>
	 * @param eneityClass
	 * @param eneityIds
	 */
	public <T> void remove(Class<T> eneityClass, Object[] eneityIds);

	/**
	 * 
	 * @param <T>
	 * @param eneityClass
	 * @param eneityId
	 *            获得单个实体
	 * @return
	 */
	public <T> T find(Class<T> eneityClass, Object eneityId);

	/**
	 * 获取实体集合
	 * 
	 * @param eneityClass
	 * @return
	 */
	public <T> List<T> getData(Class<T> eneityClass);
	
	/**
	 * 根据条件查询实体集合
	 * 
	 * @param eneityClass
	 *            实体class
	 * @param where
	 *            条件语句
	 * @param params
	 *            条件参数
	 * @return
	 */
	public <T> List<T> getData(Class<T> eneityClass, String where,
			Object[] params);

	/**
	 * 查询部分字段，实体集合
	 * @param eneityClass
	 * @param retrunFileds
	 * @param where
	 * @param params
	 * @return
	 */
	public <T> List<T> getData(Class<T> eneityClass,
			String[] returnFileds, String where, Object[] params);

	/**
	 * 统计数量
	 * 
	 * @param eneityClass
	 *            实体class
	 * @return
	 */
	public <T> long getCount(Class<T> eneityClass);

	/**
	 * 根据条件查询实体数量
	 * 
	 * @param eneityClass
	 *            实体class
	 * @param where
	 *            条件语句
	 * @param params
	 *            参数
	 * @return
	 */
	public <T> long getCount(Class<T> eneityClass, String where, Object[] params);

	/**
	 * 检测实体存在已经
	 * 
	 * @param eneityClass
	 * @param where
	 * @param params
	 * @return
	 */
	public <T> Boolean checkExist(Class<T> eneityClass, String where,
			Object[] params);
	
	/**
	 * 根据条件获得唯一对象
	 * @param eneityClass
	 * @param where
	 * @param params
	 * @return
	 */
	public <T> T getUnique(Class<T> eneityClass, String where,Object[] params);

	/**
	 * 分页查询
	 * @param eneityClass
	 * @param where
	 * @param params
	 * @param first
	 * @param size
	 * @return
	 */
	public <T> List<T> getPageData(Class<T> eneityClass, String where,
			Object[] params,int first,int size);
	
}
